#!/usr/bin/env python3.11
# -*- encoding: utf-8 -*-
"""
@File    :   utils.py
@Time    :   2024/04/12 15:17:49
@Author  :   windstarry 
@Version :   1.0
"""
# here put the import lib
import uuid
import hashlib
import openpyxl

def get_random_str():
    """
    生成一个随机的MD5字符串。

    该函数首先基于UUID生成一个随机数，然后将这个随机数通过MD5算法进行哈希，最后返回固定长度的哈希字符串。

    返回:
        str: 一个32位长度的MD5哈希字符串。
    """
    # 生成一个随机的UUID
    uuid_val = uuid.uuid4()
    # 将UUID转换成字符串并编码为UTF-8
    uuid_str = str(uuid_val).encode("utf-8")
    # 创建一个MD5哈希对象
    md5 = hashlib.md5()
    # 使用UUID字符串更新MD5哈希对象
    md5.update(uuid_str)
    # 返回计算得到的MD5哈希字符串
    return md5.hexdigest()

def is_allowed_file(file):
    """
    检查文件类型是否被允许上传。
    """
    # 只允许图片上传，需要根据实际需求调整
    allowed_types = ('image/jpeg', 'image/png', 'image/gif')
    return file.content_type in allowed_types



def read_excel_dict(path:str):
    """读取Excel数据，存储为字典 --- [{},{},{},]"""
    # 实例化一个wrokbook
    workbook = openpyxl.load_workbook(path)
    # 实例化一个sheet
    sheet = workbook['student']
    # 定义一个变量存储最终的数据--[]
    students = []
    # 准备key
    keys = ['sno','name','gender','birthday','mobile','email','address']
    # 遍历
    for row in sheet.rows:
        # 定义一个临时的字典
        temp_dict = {}
        # 组合值和key
        for index,cell in enumerate(row):
            # 组和
            temp_dict[keys[index]] = cell.value
        # 附加到list中
        students.append(temp_dict)
    #返回
    return students

def write_to_excel(data:list, path:str):
    """把数据库写入到Excel"""
    # 实例化一个workbook
    workbook = openpyxl.Workbook()
    # 激活一个sheet
    sheet = workbook.active
    # 为sheet命名
    sheet.title = 'student'
    # 准备keys
    keys = data[0].keys()
    # 准备写入数据
    for index, item in enumerate(data):
        # 遍历每一个元素
        for k,v in enumerate(keys):
            sheet.cell(row=index + 1, column=k+ 1, value=str(item[v]))
    # 写入到文件
    workbook.save(path)

